package com.anaplan.connector.unit; import com.anaplan.client.Task; import com.anaplan.client.TaskStatus; import com.anaplan.connector.utils.AnaplanUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertEquals; @RunWith(PowerMockRunner.class) @PrepareForTest({ Task.class, TaskStatus.class}) public class AnaplanUtilTestCases { private Task mockTask; private TaskStatus mockTaskStatus; @Before public void setUp() { mockTask = Mockito.mock(Task.class); mockTaskStatus = Mockito.mock(TaskStatus.class); } @After public void tearDown() { mockTask = null; mockTaskStatus = null; } @Test public void testRunServerTask() throws Exception { final int mockServerPingCountLimit = 4; PowerMockito.doReturn(mockTaskStatus).when(mockTask).getStatus(); PowerMockito.doReturn(TaskStatus.State.IN_PROGRESS).when(mockTaskStatus) .getTaskState(); Mockito.when(mockTaskStatus.getTaskState()).thenAnswer(new Answer() { private int count = 0; @Override public Object answer(InvocationOnMock invocationOnMock) throws Throwable { if (count++ < mockServerPingCountLimit) return TaskStatus.State.IN_PROGRESS; return TaskStatus.State.COMPLETE; } }); TaskStatus resultStatus = AnaplanUtil.runServerTask(mockTask); assertEquals(mockTaskStatus, resultStatus); } }